
/**
 * 获取localstoage的参数值
 * 
 * @param {*} key 
 * @param {*} delVal 
 */
export const localStorage = {
  get: (key, delVal = null) => {
    return (process.client ? window.localStorage.getItem(key) : delVal) || delVal
  },
  set: (key, val) => {
    process.client && window.localStorage.setItem(key, val)
  },
  clear: () => {
    process.client && window.localStorage.clear()
  }
}

/**
 * 自动计算px
 */
export const calculatePx = (input) => {
  // 检查输入是否为数字
  if (typeof input === 'number') {
    // 如果是数字，则转换为 px 字符串
    return `${input}px`;
  }
  // 检查输入是否为字符串
  else if (typeof input === 'string') {
    // 尝试将字符串解析为数字
    const parsedNumber = parseFloat(input);
    // 如果解析成功且没有 NaN，则转换为 px 字符串
    if (!isNaN(parsedNumber)) {
      // 去除字符串中的数字部分以外的字符，并转换为 px
      const numberOnly = parsedNumber;
      return `${numberOnly}px`;
    }
    // 如果解析失败，则直接返回原字符串（假设是有效的 CSS 值）
    else {
      return input;
    }
  }
  // 如果输入既不是数字也不是字符串，则抛出错误
  else {
    throw new Error("Input must be a number or a string.");
  }
}

/**
 * 替换最后符合条件的值
 * 
 * @param {*} str 
 * @param {*} perfix 
 * @param {*} val 
 */
export const replaceLast = (str, perfix, val) => {
  if (!str) {
    return str
  }

  const vt = str.substr(str.length - 1, 1)
  if (vt === perfix) {
    return vt.substr(0, str.length - 1) + (val || '')
  }
  return str;
}

/**
 * 判断是否为外链
 *
 * @param {string} path
 * @returns {Boolean}
 */
export const isExternal = path => {
  return /^(https?:|http?:|mailto:|tel:|@@)/.test(path)
}

/**
 * 路由跳转，自动识别url，path，name
 *
 * @param {*} router
 * @param {*} path
 * @param {*} query
 * @param { Boolean } _blank
 */
export const toRoute = (router, path, query = {}, _blank = false) => {
  if (!path) return

  if (isExternal(path)) {
    // 直接将@@替换了
    window.location.href = path.replace('@@', '')
    return
  }

  const routeData = {
    ...(path.includes('/') ? { path } : { name: path }),
    ...(Object.keys(query).length
      ? path.includes('/')
        ? { query }
        : { params: query }
      : {})
  }

  if (_blank) {
    const { href } = router.resolve(routeData)
    window.open(href, '_blank')
  } else {
    router.push(routeData).catch(console.error)
  }
}

/**
 * 对象空判定
 *
 * @param {*} val
 * @returns
 */
export const isEmpty = val => {
  if (typeof val === 'object') {
    if (val instanceof Array) {
      return !(val && val.length)
    }
    return !(val && Object.keys(val).length)
  }
  if (typeof val === 'number') {
    return !/^\d+$/.test(val)
  }
  return !val
}
